Datadog で AWS PrivateLink を使ったプライベートネットワーク接続をやってみた

Datadog で AWS PrivateLink を使ったプライベートネットワーク接続をやってみた

Clock Icon2024.10.30

こんにちは。テクニカルサポートチームのShiinaです。

はじめに

SaaS の監視ツールを利用する場合、EC2 インスタンスに専用のエージェントを導入し、エージェントからインターネット経由で SaaS に通信することが多いかと思います。もちろん、Datadog もこれに当てはまります。
ここで困るのがセキュリティ要件で EC2 インスタンスから直接インターネットへの通信を禁じている環境です。
プロキシサーバを用意し、通信を中継させる方法がありますが、Datadog では AWS PrivateLink を介して Datadog に対してメトリクスやログなどを送信することができます。
今回は AWS PrivateLink を介したプライベートなネットワーク接続で Datadog にメトリクスとログの送信をやってみました。

バージニア北部リージョン(us-east-1)のみでエンドポイントが公開されています。
そのため、東京や大阪リージョンから利用する場合にはリージョン間 VPC ピアリングを行い、通信を確立する必要があります。

用途 Datadog エンドポイントサービス名 プライベート DNS 名
ログ (Agent HTTP インテーク) com.amazonaws.vpce.us-east-1.vpce-svc-025a56b9187ac1f63 agent-http-intake.logs.datadoghq.com
ログ (ユーザー HTTP インテーク) com.amazonaws.vpce.us-east-1.vpce-svc-0e36256cb6172439d http-intake.logs.datadoghq.com
API com.amazonaws.vpce.us-east-1.vpce-svc-064ea718f8d0ead77 api.datadoghq.com
メトリクス com.amazonaws.vpce.us-east-1.vpce-svc-09a8006e245d1e7b8 metrics.agent.datadoghq.com
コンテナ com.amazonaws.vpce.us-east-1.vpce-svc-0ad5fb9e71f85fe99 orchestrator.datadoghq.com
プロセス com.amazonaws.vpce.us-east-1.vpce-svc-0ed1f789ac6b0bde1 process.datadoghq.com
プロファイリング com.amazonaws.vpce.us-east-1.vpce-svc-022ae36a7b2472029 intake.profile.datadoghq.com
トレース com.amazonaws.vpce.us-east-1.vpce-svc-0355bb1880dfa09c2 trace.agent.datadoghq.com
データベースモニタリング com.amazonaws.vpce.us-east-1.vpce-svc-0ce70d55ec4af8501 dbm-metrics-intake.datadoghq.com
リモート構成 com.amazonaws.vpce.us-east-1.vpce-svc-01f21309e507e3b1d config.datadoghq.com

最新情報は Datadog のドキュメント[1]をご参照ください。

前提

  • 東京とバージニア北部リージョンを利用します。
  • Datadog エージェントはあらかじめ導入されていること。
  • PrivateLink のエンドポイントはシングル AZ 構成とし、冗長化は考慮しません。
  • Datadog エージェントからメトリクスとログの送信に必要な最低限のエンドポイントを利用します。
    メトリクス:com.amazonaws.vpce.us-east-1.vpce-svc-09a8006e245d1e7b8
    ログ (Agent HTTP インテーク):com.amazonaws.vpce.us-east-1.vpce-svc-025a56b9187ac1f63

構成

構成図

今回利用したリソースは次の通りです。

東京リージョン

  • VPC
    CIDR:10.0.0.0/16
    名前:my-vpc-vpc
  • サブネット
    CIDR:10.0.2.0/24
    アベイラビリティゾーン:apne1-az4
    名前: my-vpc-subnet-private1-ap-northeast-1a

バージニア北部リージョン

  • VPC
    CIDR:192.168.0.0/16
    名前:Datadog-PrivateLink-VPC
  • サブネット
    CIDR:192.168.0.0/20
    アベイラビリティゾーン:us-east-1f
    名前:Datadog-PrivateLink-Subnet
  • セキュリティーグループ
    名前:DatadogPrivateLinkSG
    インバウンドルールは次の通り。
    ポート:443 ソース:東京リージョンの VPC CIDR(10.0.0.0/16)を許可

グローバル

  • Amazon Route 53
    プライベートホストゾーン
    ドメイン名:metrics.agent.datadoghq.com、agent-http-intake.logs.datadoghq.com

セットアップ手順

1.ネットワークリソース作成(バージニア北部)

バージニア北部リージョンにエンドポイント作成するに伴い、必要となる VPC、CIDR 、サブネット、セキュリティグループのリソースを作成しておきます。

CreateVpc-VPC-Console-10-22-2024_05_20_PM

CreateSubnet-VPC-Console-10-28-2024_10_53_AM

CreateSecurityGroup-VPC-Console-10-22-2024_05_26_PM-png-1500×1075--10-28-2024_09_21_AM

2.エンドポイント作成(バージニア北部)

エンドポイントは2つ(メトリクス用、ログ用)作成します。
バージニア北部リージョンの VPC サービスメニューよりエンドポイントを選択します。
[エンドポイントを作成]をクリックします。
次のように設定を行います。

・名前:任意の名前
・サービスカテゴリ:その他のエンドポイントサービス
・サービス名:Datadog エンドポイントサービス名
※入力後に[サービスの検証]をクリックします。

・VPC:Datadog-PrivateLink-VPC
・DNS名を有効化:無効
・サブネット:Datadog-PrivateLink-Subnet
・セキュリティグループ:DatadogPrivateLinkSG

設定項目を入力したら[エンドポイント作成]をクリックします。
CreateVpcEndpoint-VPC-Console-10-22-2024_05_29_PM-png-1500×1152--10-28-2024_09_22_AM

CreateVpcEndpoint-VPC-Console-10-22-2024_05_34_PM-png-1500×942--10-28-2024_09_23_AM

同様の手順でログ (Agent HTTP インテーク)のエンドポイントを作成してください。

作成後、2つのエンドポイントのステータスが使用可能になっていれば OK です。

Endpoints-VPC-Console-10-28-2024_10_54_AM

3.VPC ピアリング接続、ルーティング設定(バージニア北部)

バージニア北部リージョンの VPC サービスメニューよりピアリング接続を選択します。
次のように設定を行います。

・名前:任意の名前
・VPC ID (リクエスタ):Datadog-PrivateLink-VPC の VPC ID
・アカウント:自身のアカウント
・リージョン:別のリージョン(東京リージョン)
・VPC ID:my-vpc-vpc の VPC ID

設定項目を入力したら[ピアリング接続を作成]をクリックします。

CreatePeeringConnection-VPC-Console-10-22-2024_05_46_PM-png-1500×2050--10-28-2024_09_24_AM

作成すると一覧にピアリング接続 ID (pcx-xxxxxxxxx)が表示されます。
ピアリング接続 ID は後述の手順で利用するため、控えておいてください。

バージニア北部リージョンの VPC サービスメニューよりサブネットを選択します。
Datadog-PrivateLink-Subnet を選択します。
ルートテーブルをクリックします。
遷移したルートテーブルのページでルートタブを選択し、[ルートを編集]をクリックします。
以下のルートを追加します。

・送信先:10.0.0.0/16(東京リージョンのVPC CIDR)
・ターゲット:ピアリング接続 ID(pcx-xxxxxxxxx)

[変更を保存]をクリックします。

EditRoutes-VPC-Console-10-22-2024_05_50_PM-png-1500×367--10-28-2024_09_25_AM

※現時点では追加したルートのステータスはブラックホール状態ですが、問題はありません。
RouteTableDetails-VPC-Console-10-22-2024_05_51_PM-png-1500×730--10-28-2024_09_26_AM

4.VPC ピアリングリクエスト承諾、ルーティング設定(東京リージョン)

東京リージョンの VPC サービスメニューよりピアリング接続を選択します。
保留中のリクエストを選択し、アクションより[リクエストを承諾]をクリックします。

PeeringConnections-VPC-Console-10-22-2024_05_53_PM-png-1500×1284--10-28-2024_09_28_AM

承諾後、ピアリング接続のステータスが Active となることを確認します。

PeeringConnections-VPC-Console-10-22-2024_05_55_PM-png-1500×479--10-28-2024_09_29_AM

東京リージョンの VPC サービスメニューよりサブネットを選択します。
my-vpc-subnet-private1-ap-northeast-1a を選択します。
ルートテーブルをクリックします。
遷移したルートテーブルのページでルートタブを選択し、[ルートを編集]をクリックします。
以下のルートを追加します。

・送信先:192.168.0.0/16(バージニア北部リージョンのVPC CIDR)
・ターゲット:ピアリング接続 ID(pcx-xxxxxxxxx)

[変更を保存]をクリックします。

EditRoutes-VPC-Console-10-22-2024_05_58_PM-png-1500×365--10-28-2024_09_30_AM

ルートのステータスはアクティブとなっていることを確認します。

RouteTableDetails-VPC-Console-10-22-2024_05_59_PM-png-1500×613--10-28-2024_09_31_AM

ピアリングリクエストが承諾されたことにより、バージニア北部リージョンのルートのステータスもブラックホールからアクティブになります。

RouteTableDetails-VPC-Console-10-22-2024_06_00_PM-png-1500×627--10-28-2024_09_32_AM

5.Amazon Route 53 プライベートホストゾーン作成、エイリアスレコード登録

プライベートホストゾーンは2つ(メトリクス用、ログ用)作成します。

Amazon Route 53 サービスメニューよりホストゾーンを選択します。
[ホストゾーンの作成]をクリックします。

次のように設定を行います。

・ドメイン名:プライベート DNS 名(メトリクスの場合はmetrics.agent.datadoghq.com)
・タイプ:プライベートホストゾーン
・ホストゾーンに関連付けるVPC
 バージニア北部リージョン:Datadog-PrivateLink-VPC の VPC ID
 東京リージョン:my-vpc-vpc の VPC ID

設定項目を入力したら[ホストゾーンの作成]をクリックします。

ホストゾーン-作成-10-23-2024_11_25_AM-png-1500×2324--10-28-2024_09_37_AM

次に、作成したホストゾーンを選択します。
[レコードを作成]をクリックします。

次のように設定を行います。

・レコードタイプ:Aレコード
・エイリアス:有効化にトグル
・トラフィックのルーティング先:VPC エンドポイントへのエイリアス(バージニア北部リージョン)
・エンドポイント:エンドポイントの DNS 名(メトリクスの場合はxxxx.vpce-svc-09a8006e245d1e7b8.us-east-1.vpce.amazonaws.com)
※ DNS 名はエンドポイントごとに2つ登録されるため、いずれか片方の選択で構いません。

設定項目を入力したら[レコードを作成]をクリックします。

metrics-agent-datadoghq-com-レコードを追加-10-22-2024_06_21_PM-png-1500×994--10-28-2024_09_34_AM

A レコードが作成されたことを確認してください。

metrics-agent-datadoghq-com-詳細-10-22-2024_06_22_PM-png-1500×961--10-28-2024_09_35_AM

同様の手順でログ (Agent HTTP インテーク)のプライベートホストゾーンの作成とエイリアスレコードを登録してください。

agent-http-intake-logs-datadoghq-com-詳細-10-22-2024_06_27_PM-png-1500×991--10-28-2024_09_36_AM

6.名前解決の確認

Datadog エージェントが導入されている EC2 インスタンスに接続し、プライベートホストゾーンに登録したレコードを名前解決できるか確認を行います。

  • ログ (Agent HTTP インテーク)
dig metrics.agent.datadoghq.com

; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> metrics.agent.datadoghq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58246
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;metrics.agent.datadoghq.com.   IN      A

;; ANSWER SECTION:
metrics.agent.datadoghq.com. 60 IN      A       192.168.9.209

;; Query time: 1 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Wed Oct 23 00:19:58 UTC 2024
;; MSG SIZE  rcvd: 72
  • メトリクス
dig agent-http-intake.logs.datadoghq.com
; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> agent-http-intake.logs.datadoghq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47961
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;agent-http-intake.logs.datadoghq.com. IN A

;; ANSWER SECTION:
agent-http-intake.logs.datadoghq.com. 60 IN A   192.168.10.219

;; Query time: 1 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Wed Oct 23 00:20:23 UTC 2024
;; MSG SIZE  rcvd: 81

いずれもエンドポイントのプライベート IPアドレスが返されていれば問題なく設定できています。

7.疎通確認

エンドポイントに通信が行えるか疎通確認を実施します。

nc -w1 metrics.agent.datadoghq.com -vz 443
Connection to metrics.agent.datadoghq.com (192.168.9.209) 443 port [tcp/https] succeeded!

nc -w1 agent-http-intake.logs.datadoghq.com -vz 443
Connection to agent-http-intake.logs.datadoghq.com (192.168.10.219) 443 port [tcp/https] succeeded!

succeeded! と表示されれば問題なく疎通できています。

8.Datadog エージェント設定

エンドポイントを利用して通信を行うため、Datadog エージェントの再起動を行います。
ログをエンドポイント経由で送信する場合、 HTTPS 経由とする設定である force_use_httptrue にする必要があります。
そのため、 datadog.yaml を修正の上、再起動を行います。

/etc/datadog-agent/datadog.yaml
(中略)

logs_enabled: true
logs_config:
    force_use_http: true

(中略)
systemctl restart datadog-agent

動作確認

Datadog エージェントがエンドポイントを利用してメトリクス、ログを送信できているか確認を行います。

メトリクスの確認

Datadog コンソールメニューの Infrastructure より Hosts を選択します。
一覧より該当のホスト名を選択します。
Metrics タブの Apps より system を選択します。
各メトリクスが表示されていれば問題なくメトリクスを送信できています。

Host-List-Datadog-10-23-2024_11_19_AM

ログの確認

ログ監視設定を conf.yaml で行います。
例として /var/log/apllog を監視対象ファイルとし、ログを収集します。

/etc/datadog-agent/conf.d/log.d/conf.yaml
logs:
  - type: file
    path: "/var/log/apllog"
    service: "apl"
    source: "webserver"

設定反映のため、Datadogエージェントを再起動します。

systemctl restart datadog-agent

監視対象ファイルに対してログメッセージの書き込みを行なってみます。

echo testmessage >> /var/log/apllog

Datadog コンソールメニューの Logs より Explorer を選択します。
書き込みを行なったログメッセージが確認できれば問題なくログを送信できています。

Log-Explorer-Datadog-10-23-2024_11_16_AM

トラブルシューティグ

「Could not refresh Remote Config: failed to issue org data request」 のエラーが出力されている

  • 事象
    エージェントログに断続的に次のエラーメッセージが出力されている。
/var/log/datadog/agent.log
2024-10-23 00:36:49 UTC | CORE | ERROR | (pkg/config/remote/service/service.go:469 in pollOrgStatus) | [Remote Config] Could not refresh Remote Config: failed to issue org data request: Get "https://config.datadoghq.com/api/v0.1/status": dial tcp 3.233.157.103:443: i/o timeout
  • 対処方法
    リモート構成用の通信が失敗しています。
    Agent バージョン 7.47.0 以降は、デフォルトで remote_configuration.enabledtrue に設定されているため、通信が発生します。
    リモート構成を利用する場合はエンドポイントの作成が必要ですが、利用しない場合はエラーメッセージは静観でも問題ありません。
    エラーメッセージを抑止したい場合は datadog.yamlremote_configuration.enabledtrue から false に変更してください。
datadog.yaml
remote_configuration:
  enabled: false

名前解決ができない

  • 事象
    名前解決を行なってもプライベートホストゾーンに登録したエンドポイントが返ってこず、パブリック IP が返される。
dig  metrics.agent.datadoghq.com 

; <<>> DiG 9.10.6 <<>> metrics.agent.datadoghq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44008
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;metrics.agent.datadoghq.com.	IN	A

;; ANSWER SECTION:
metrics.agent.datadoghq.com. 300 IN	CNAME	alb-metrics-agent-shard1-770518637.us-east-1.elb.amazonaws.com.
alb-metrics-agent-shard1-770518637.us-east-1.elb.amazonaws.com.	60 IN A	3.233.148.122
alb-metrics-agent-shard1-770518637.us-east-1.elb.amazonaws.com.	60 IN A	3.233.148.6
alb-metrics-agent-shard1-770518637.us-east-1.elb.amazonaws.com.	60 IN A	3.233.148.116
alb-metrics-agent-shard1-770518637.us-east-1.elb.amazonaws.com.	60 IN A	3.233.148.64
alb-metrics-agent-shard1-770518637.us-east-1.elb.amazonaws.com.	60 IN A	3.233.148.43
alb-metrics-agent-shard1-770518637.us-east-1.elb.amazonaws.com.	60 IN A	3.233.148.18
alb-metrics-agent-shard1-770518637.us-east-1.elb.amazonaws.com.	60 IN A	3.233.148.4
alb-metrics-agent-shard1-770518637.us-east-1.elb.amazonaws.com.	60 IN A	3.233.148.75

;; Query time: 1 msec
;; SERVER: 127.0.2.2#53(127.0.2.2)
;; WHEN: Wed Oct 23 09:14:24 JST 2024
;; MSG SIZE  rcvd: 260
  • 対処方法
    パブリック IP で応答が返されている場合はプライベートホストゾーンでの名前解決に失敗しています。
    次に該当していないか確認しましょう。
    ・関連付け VPC の設定が正しく設定されていない
    ・VPC の DNS ホスト名が有効となっていない
    ・VPC の DNS 解決が有効となっていない

vpcs-VPC-Console-10-23-2024_09_19_AM-png-1500×550--10-28-2024_09_39_AM

疎通できない

  • 事象
    エンドポイントに対する通信がタイムアウトする。
nc -w1 metrics.agent.datadoghq.com -vz 443

nc: connect to metrics.agent.datadoghq.com (192.168.9.209) port 443 (tcp) timed out: Operation now in progress
  • 対処方法
    セキュリティグループもしくはルートテーブルの設定誤りであることが多いです。
    次に該当していないか確認しましょう。
    ・エンドポイントに設定しているセキュリティグループのインバウンドルールが正しく設定されていない
    ・サブネットのルートテーブルのルート設定が正しく設定されていない
    東京側、バージニア北部側両方のサブネットのルートテーブルでのルート設定が必要ですのでご注意ください。

まとめ

Datadog の AWS PrivateLink エンドポイントを使ってメトリクスとログを送信する手順を紹介しました。
VPC ピアリングの設定、プライベートホストゾーンの作成、Datadog エージェントの設定などが必要です。
リージョン間 VPC ピアリングを行う場合、設定手順が少々ややこしい点には注意しましょう。

本記事が誰かのお役に立てれば幸いです。

参考

https://docs.datadoghq.com/agent/remote_config/?tab=configurationyamlfile#opting-out-of-remote-configuration

https://www.datadoghq.com/architecture/connect-to-datadog-over-aws-privatelink/

脚注
  1. https://docs.datadoghq.com/agent/guide/private-link/?tab=connectfromsameregion ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.